package com.example.zqr.service;
import com.example.zqr.dto.OrderDto;
import com.example.zqr.dto.OrderitemDto;
import com.example.zqr.pojo.Orderitem;
import com.example.zqr.pojo.Orders;

import java.util.List;
public interface OrderService {
    /**
     * 获取所有订单的列表。
     *
     * @return 包含所有订单的列表。
     */
    List<Orders> listAll();

    /**
     * 获取所有订单的数据传输对象（DTO）列表。
     *
     * @return 包含所有订单DTO的列表。
     */
    List<OrderDto> listAllDto();

    /**
     * 创建一个新的订单。
     *
     * @param order 要创建的订单。
     * @return 影响的记录数量，为1表示插入成功。
     */
    int create(Orders order);

    /**
     * 根据订单ID更新订单信息。
     *
     * @param id    订单的唯一标识符。
     * @param order 包含更新信息的订单。
     * @return 影响的记录数量，为1表示更新成功。
     */
    int update(String id, Orders order);

    /**
     * 根据订单ID删除订单。
     *
     * @param id 订单的唯一标识符。
     * @return 影响的记录数量，为1表示删除成功。
     */
    int delete(String id);

    /**
     * 分页获取订单列表。
     *
     * @param pageNum  当前页码。
     * @param pageSize 每页显示的记录数。
     * @return 分页后的订单列表。
     */
    List<Orders> list(int pageNum, int pageSize);

    /**
     * 根据订单ID获取订单详情。
     *
     * @param id 订单的唯一标识符。
     * @return 对应ID的订单详情。
     */
    Orders get(String id);

    /**
     * 根据订单ID获取订单的数据传输对象（DTO）。
     *
     * @param id 订单的唯一标识符。
     * @return 对应ID的订单DTO。
     */
    OrderDto getDto(String id);

    /**
     * 根据用户ID获取该用户的所有订单DTO。
     *
     * @param userid 用户的唯一标识符。
     * @return 该用户的所有订单DTO列表。
     */
    List<OrderDto> getOrderByUser(String userid);

    /**
     * 根据订单ID获取该订单的所有订单项DTO。
     *
     * @param orderid 订单的唯一标识符。
     * @return 该订单的所有订单项DTO列表。
     */
    List<OrderitemDto> getOrderItemByOrderid(String orderid);

    /**
     * 插入一个新的订单记录。
     *
     * @param orders 要插入的订单记录。
     * @return 影响的记录数量，为1表示插入成功。
     */
    int insertOrder(Orders orders);

    /**
     * 插入一个新的订单项记录。
     *
     * @param orderitem 要插入的订单项记录。
     * @return 影响的记录数量，为1表示插入成功。
     */
    int insertOrderitem(Orderitem orderitem);

    /**
     * 更新订单项的复习状态。
     *
     * @param orderitem 包含新复习状态的订单项。
     * @return 影响的记录数量，表示更新操作成功与否。
     */
    int updateOrderitemRevStatus(Orderitem orderitem);

    /**
     * 更新订单的状态。
     *
     * @param orders 包含新状态的订单。
     * @return 影响的记录数量，表示更新操作成功与否。
     */
    int updateOrderStatus(Orders orders);
}
